Ext.define('aps.administrarFasePanel', {
    extend: 'Ext.form.Panel',
    alias : 'aps.administrarFasePanel',

    title :   'Administrar Fase',
    id:       'panel_administrar_fase',
    name:     'panel_administrar_fase',
    layout:   'fit',
    frame:    true,
    closable: true,
    border:   false,
  
    initComponent: function() {
        var grid_fases = Ext.create('aps.faseGrid');
        this.items = [{
            xtype:      'form',
            title:      'Administrar Fase',
            autoScroll: true,
            fieldDefaults: {
                blankText:     'Este campo no puede ser nulo',
                msgTarget:     'side',
                autoFitErrors: false
            },
            items: [{
                xtype:       'combo',
                margin:      '50 20 20 20',
                fieldLabel:  '<b>Buscar por</b>', 
                hiddenName:  'campo',  
                name:        'campo',
                editable:     false,
                mode:        'local',
                width:        480,
                labelWidth:   150,
                allowBlank:   false,
                displayField: 'opcion',
                valueField:   'campo',
                emptyText :   'Seleccione un campo', 
                store: new Ext.data.SimpleStore({  
                    id      : 0 ,  
                    fields  : ['id', 'opcion', 'campo'],  
                    data    : [
                        [1, 'Nombre de la Fase', 'nombre'],
                        [2, 'Descripcion', 'descripcion'],  
                        [3, 'Fecha de Inicio', 'fechainicio'],
                        [4, 'Fecha de Fin', 'fechafin']
                    ]
                }),   
            }, {
                xtype:      'textfield',
                margin:     '5 20 20 20',
                name :      'igual',
                labelWidth:  150,
                width: 480,                
                fieldLabel: '<b>Igual a</b>',
                allowBlank: false
            },{
                xtype: 'button',
                text: 'Buscar',    
                x: 520,
                y: -42,
                iconCls: 'search-icon',
                handler:  this.form_buscar_handler            
            },
            grid_fases
            ]
        }];
        this.buttons =[{
            text:    'Reordenar Fases',
            id:      'reordenar_fase_btn',
            iconCls: 'reordenar-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_reordenar_handler
        },{    
            text:    'Habilitar / Deshabilitar roles',
            id:      'asignar_rol_btn',
            iconCls: 'asignar-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_asignar_rol_handler
        },{    
            text:    'Finalizar Fase',
            id:      'terminar_fase_btn',
            iconCls: 'end-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_terminar_handler
        },{    
            text:    'Iniciar Fase',
            id:      'iniciar_fase_btn',
            iconCls: 'ok-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_iniciar_handler 
        }, {
            text:    'Importar fase',
            id:      'importar_fase_btn',
            iconCls: 'import-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_importar_handler
        }, {
            text:    'Modificar',
            id:      'modificar_fase_btn',
            iconCls: 'update-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_update_handler
        }, {
            text:    'Eliminar',
            id:      'eliminar_fase_btn',
            iconCls: 'delete-icon',
            hidden:  true,
            grid:    grid_fases,
            handler: this.form_delete_handler
        }, {
            text:    'Nuevo',
            id:      'nuevo_fase_btn',
            iconCls: 'new-icon',
            hidden:  true,
            handler: this.form_new_handler
        }, {
            text:    'Cancelar',
            id:      'cancelar_fase_btn',
            iconCls: 'cancel-icon',            
            handler: this.form_cancel_handler
        }, {
            text:    'Limpiar',
            id:      'limpiar_fase_btn',
            iconCls: 'clear-icon',
            handler: this.form_reset_handler
        }];
        
        this.listeners = {
            close : function() {
                // cerramos los paneles hijos abiertos (si hubiere)
                Ext.getCmp('area-central').cerrar_pestanhas([
                    'panel_modificar_fase',
                    'panel_crear_fase',
                    'panel_importar_fase'
                ]);
            },
            render : function(){
                // mostramos los botones segun los permisos
                var fun = Ext.getCmp('funcionalidades');
                if(fun.existe_permiso('cr:fa')){
                    Ext.getCmp('nuevo_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('mo:fa')){
                    Ext.getCmp('modificar_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('el:fa')){
                    Ext.getCmp('eliminar_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('im:fa')){
                    Ext.getCmp('importar_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('te:fa')){
                    Ext.getCmp('terminar_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('in:fa')){
                    Ext.getCmp('iniciar_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('re:fa')){
                    Ext.getCmp('reordenar_fase_btn').setVisible(true);
                }
                if(fun.existe_permiso('as:ro-fa')){
                    Ext.getCmp('asignar_rol_btn').setVisible(true);
                }
            }
        };
        
        this.callParent(arguments);
    },
    
    form_asignar_rol_handler : function() {
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar una fase para asignar / desasignar roles');
        }
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_asignar_rol','aps.asignarRolPanel');
            var panel  = Ext.getCmp('panel_asignar_rol');
            panel.setVisible(false);
            var id_usuario = records[0].data.id;
            // el campo 0 es nuestro campo oculto
            panel.items.getAt(0).setValue(id_usuario)
            panel.llenar_grids();
            panel.setVisible(true);
        }
    },
    
    form_terminar_handler: function(){
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar una fase para finalizar');
        }
        else if(records[0].data.estado == 'FINALIZADO'){
            Ext.Msg.alert('INFO','La fase ya ha sido finalizada');
        }
        else if(records[0].data.estado == 'NO-INICIADO'){
            Ext.Msg.alert('INFO','La fase no se puede finalizar si nunca se inicio');
        }
        else{
            var grid = this.grid;            
            Ext.Msg.show({
                title:'INFO',
                msg: 'Esta seguro que desea finalizar esta fase?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn){
                    if(btn == 'yes'){
                        // FINALIZACION
                        Ext.Ajax.request({
                            url:    '/terminar_fase',
                            params: {id_fase : records[0].data.id},
                            success: function(response, opts) {
                                var obj = Ext.JSON.decode(response.responseText);
                                if(obj.success){                                                      
                                    Ext.Msg.alert('INFO','Fase Finalizada!');
                                    Ext.StoreMgr.lookup('faseStore').load({
                                        params: {
                                            id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
                                        }
                                    });
                                }
                                else {
                                    Ext.Msg.alert('ERROR','No se han bloqueado todas los items de la fase o la fase anterior no esta finalizada!');
                                }
                            },
                        });
                    }
                }
            });
        }
    },
    
    form_iniciar_handler: function(){
        var estado_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.estado;
        var records = this.grid.getSelectionModel().getSelection();
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar una fase para iniciar');
        }
        else if(records[0].data.estado == 'INICIADO'){
            Ext.Msg.alert('INFO','La fase ya ha sido iniciada');
        }
        else if (estado_proyecto != 'INICIADO'){
               Ext.Msg.alert('ERROR','No se puede iniciar la Fase porque el proyecto no se ha iniciado');
        }
        else{
            var grid = this.grid;            
            Ext.Msg.show({
                title:'INFO',
                msg: 'Esta seguro que desea iniciar esta fase?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn){
                    if(btn == 'yes'){
                        // INICIALIZACION
                        Ext.Ajax.request({
                            url:    '/iniciar_fase',
                            params: {id_fase : records[0].data.id},
                            success: function(response, opts) {
                                var obj = Ext.JSON.decode(response.responseText);
                                if(obj.success){                                                      
                                    Ext.Msg.alert('INFO','Fase Iniciada!');
                                    Ext.StoreMgr.lookup('faseStore').load({
                                        params: {
                                            id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
                                        }
                                    });
                                } 
                                else {
                                   Ext.Msg.alert('ERROR','La fase no tiene ningun item!');
                                }
                            },
                        });
                    }
                }
            });
        }
    },
 
    form_update_handler : function() {
        var records = this.grid.getSelectionModel().getSelection();
        var estado_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.estado;
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un registro para modificar');
        }
        else if(records[0].data.estado == 'FINALIZADO'){
               Ext.Msg.alert('ERROR','No se puede modificar esta Fase porque se encuentra finalizada ');
        }  
        else if(records[0].data.estado == 'INICIADO'){
            Ext.getCmp('area-central').agregar_pestanha('panel_modificar_fase','aps.modificarFasePanel');
            var panel = Ext.getCmp('panel_modificar_fase').form;
            panel.loadRecord(records[0]);
            panel._fields.items[1].disable();
            panel._fields.items[2].disable();
        }     
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_modificar_fase','aps.modificarFasePanel');
            Ext.getCmp('panel_modificar_fase').form.loadRecord(records[0]);
        }
    },
    
    form_delete_handler : function() {
        var records     = this.grid.getSelectionModel().getSelection();
        var id_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto;
        var estado_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.estado;
        var seleccion   = Ext.getCmp('combo-fase').valueModels[0];
        if(records == null || records.length == 0){
            Ext.Msg.alert('ERROR','Debe seleccionar un registro para eliminar');
        }
        else if(seleccion != null && seleccion.data.idfase == records[0].data.id){
            Ext.Msg.alert('ERROR','No se puede eliminar esta Fase porque es la fase actual de trabajo');
        }
        else if(estado_proyecto != 'NO-INICIADO'){
            Ext.Msg.alert('ERROR','No se puede eliminar esta Fase porque el proyecto ya se ha iniciado');
        }     
        else if(records[0].data.estado != 'NO-INICIADO'){
            Ext.Msg.alert('ERROR','No se puede eliminar esta Fase porque la fase ya se ha iniciado');
        }
        else{
            var grid = this.grid;
            Ext.Msg.show({
                title:'INFO',
                msg: 'Esta seguro que desea eliminar este registro?',
                buttons: Ext.Msg.YESNO,
                fn: function(btn){
                    if(btn == 'yes'){
                        // ELIMINACION
                        Ext.Ajax.request({
                            url:    '/eliminar_fase',
                            params: {id : records[0].data.id, id_proyecto : id_proyecto},
                            success: function(response, opts) {
                                // recargamos los datos
                                Ext.Msg.alert('INFO','Registro eliminado con exito');
                                Ext.StoreMgr.lookup('faseStore').load({
                                    params: {
                                        id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
                                     }
                                });
                             },
                            failure: function(response, opts) {
                                Ext.Msg.alert('ERROR','Ocurrio un problema al eliminar el registro!');
                            }
                        });
                    }
                }
            });
        }
    },
    
    form_buscar_handler: function(){
        var form = this.up('form').getForm();
        var campo = form.findField('campo').getValue();
        var valor = form.findField('igual').getValue();
        var id_proyecto= Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto;        
        if(valor == '' || campo == null){
            Ext.Msg.alert('ERROR','Los parametros de busqueda son ivalidos o estan incompletos');
        }
        else{
            Ext.StoreMgr.lookup('faseStore').load({
                params: {
                    filtro : campo,
                    valor:   valor,
                    id_proyecto: id_proyecto
                }
            });
        }
    },
    
    form_importar_handler: function() {
        var estado_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.estado;
        if (estado_proyecto != 'NO-INICIADO'){
            Ext.Msg.alert('ERROR','No se puede importar una Fase porque el proyecto ya se ha iniciado');
        }
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_importar_fase','aps.importarFasePanel');
        }
    },
    
    form_reordenar_handler: function() {
        var estado_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.estado;
        if (estado_proyecto != 'NO-INICIADO'){
               Ext.Msg.alert('ERROR','No se puede reordenar las fases porque el proyecto ya se ha iniciado');
        }
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_reordenar_fase','aps.reordenarFasePanel');
        }
    },
    
    form_new_handler: function() {
        var estado_proyecto = Ext.getCmp('combo-proyecto').valueModels[0].data.estado;
        if (estado_proyecto != 'NO-INICIADO'){
               Ext.Msg.alert('ERROR','No se puede crear una Fase porque el proyecto ya se ha iniciado');
        }
        else{
            Ext.getCmp('area-central').agregar_pestanha('panel_crear_fase','aps.crearFasePanel');
        }
    },
    
    form_reset_handler: function() {
        // limpiamos el formulario y hacemos foco en el primer campo
        var form = this.up('form').getForm();
        form.reset();
        form.findField('campo').focus(true,100);
        // recargamos el store
        Ext.StoreMgr.lookup('faseStore').load({
            params: {
                id_proyecto : Ext.getCmp('combo-proyecto').valueModels[0].data.idproyecto
            }
        });
    },
    
    form_cancel_handler: function() {
        this.up('panel').close();
    }
});
